package javacroft.business;

import java.util.ArrayList;
import java.util.List;
import javacroft.business.profil.*;

/**
 * Classe représentant un enseignant
 * @author fabien
 */
public class Enseignant
{

    private String sonNom = "";
    private String sonPrenom = "";
    private List<Departement> sesDepartement = null;
    private List<Profil> sesProfils = null;

    /**
     * Constructeur
     * @param nom  Nom de l'enseignant
     * @param prenom Prénom de l'enseignant
     */
    public Enseignant(String nom, String prenom)
    {
        sonNom = nom;
        sonPrenom = prenom;
        sesDepartement = new ArrayList<Departement>();
        sesProfils = new ArrayList<Profil>();
    }

    /**
     * Nom de l'enseignant
     * @return Son nom
     */
    public String getNom()
    {
        return sonNom;
    }

    /**
     * Modifie le nom de l'enseignant
     * @param sonNom Son nom
     */
    public void setNom(String sonNom)
    {
        this.sonNom = sonNom;
    }

    /**
     * Prénom de l'enseignant
     * @return Son prenom
     */
    public String getPrenom()
    {
        return sonPrenom;
    }

    /**
     * Modifie le prénom de l'enseignant
     * @param sonPrenom Son prénom
     */
    public void setPrenom(String sonPrenom)
    {
        this.sonPrenom = sonPrenom;
    }

    /**
     * Liste des départements de l'enseignant
     * @return Ses départements
     */
    public List<Departement> getSesDepartement()
    {
        return sesDepartement;
    }

    /**
     * Liste des profils de l'enseignant
     * @return Ses profils
     */
    public List<Profil> getSesProfils()
    {
        return sesProfils;
    }

    /**
     * Recherche si l'enseignant est responsable d'une ECUE
     * @return Vrai sur l'enseignant est responsable d'une ECUE, faux sinon
     */
    public boolean estResponsableECUE()
    {
        if (getProfilECUE() == null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

    /**
     * Recherche si l'enseignant est responsable d'une UE
     * @return Vrai sur l'enseignant est responsable d'une UE, faux sinon
     */
    public boolean estResponsableUE()
    {
        if (getProfilUE() == null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

    /**
     * Recherche si l'enseignant est responsable d'une année
     * @return Vrai sur l'enseignant est responsable d'une année, faux sinon
     */
    public boolean estResponsableAnnee()
    {
        if (getProfilAnnee() == null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

    /**
     * Recherche si l'enseignant est responsable d'un département
     * @return Vrai sur l'enseignant est responsable d'un département, faux sinon
     */
    public boolean estResponsableDepartement()
    {
        if (getProfilDepartement() == null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

    /**
     * Recherche si l'enseignant est responsable de l'ECUE en paramètre
     * @param ecueCourante ECUE à rechercher
     * @return Vrai sur l'enseignant est responsable de l'ECUE, faux sinon
     */
    public boolean estResponsableECUE(ECUE ecueCourante)
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableECUE"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableECUE"))
        {
            return ((ResponsableECUE) sonProfil).getLesECUE().contains(ecueCourante);
        }
        else
        {
            return false;
        }
    }

    /**
     * Recherche si l'enseignant est responsable de l'UE en paramètre
     * @param ueCourante UE à rechercher
     * @return Vrai sur l'enseignant est responsable de l'UE, faux sinon
     */
    public boolean estResponsableUE(UE ueCourante)
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableUE"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableUE"))
        {
            return ((ResponsableUE) sonProfil).getLesUE().contains(ueCourante);
        }
        else
        {
            return false;
        }
    }

    /**
     * Recherche si l'enseignant est responsable de l'année en paramètre
     * @param anneeCourante Année à rechercher
     * @return Vrai sur l'enseignant est responsable de l'année, faux sinon
     */
    public boolean estResponsableAnnee(Annee anneeCourante)
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableAnnee"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableAnnee"))
        {
            return ((ResponsableAnnee) sonProfil).getLesAnnees().contains(anneeCourante);
        }
        else
        {
            return false;
        }
    }

    /**
     * Recherche si l'enseignant est responsable du département en paramètre
     * @param departementCourant Département à rechercher
     * @return Vrai sur l'enseignant est responsable du département, faux sinon
     */
    public boolean estResponsableDepartement(Departement departementCourant)
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableDepartement"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableDepartement"))
        {
            return ((ResponsableDepartement) sonProfil).getLesDepartements().contains(departementCourant);
        }
        else
        {
            return false;
        }
    }

    /**
     * Liste des ECUE dont l'enseignant est responsable
     * @return Liste d'ECUE
     */
    public List<ECUE> getSesECUE()
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableECUE"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableECUE"))
        {
            return ((ResponsableECUE) sonProfil).getLesECUE();
        }
        else
        {
            return new ArrayList<ECUE>();
        }
    }

    /**
     * Liste des UE dont l'enseignant est responsable
     * @return Liste d'UE
     */
    public List<UE> getSesUE()
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableUE"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableUE"))
        {
            return ((ResponsableUE) sonProfil).getLesUE();
        }
        else
        {
            return new ArrayList<UE>();
        }
    }

    /**
     * Profil responsable d'UE
     * @return Le profil si l'enseignant est reponsable d'UE
     */
    public Profil getProfilUE()
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableUE"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableUE"))
        {
            return sonProfil;
        }
        else
        {
            return null;
        }
    }

    /**
     * Profil responsable d'ECUE
     * @return Le profil si l'enseignant est reponsable d'ECUE
     */
    public Profil getProfilECUE()
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableECUE"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableECUE"))
        {
            return sonProfil;
        }
        else
        {
            return null;
        }
    }

    /**
     * Profil responsable d'année
     * @return Le profil si l'enseignant est reponsable d'année
     */
    public Profil getProfilAnnee()
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableAnnee"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableAnnee"))
        {
            return sonProfil;
        }
        else
        {
            return null;
        }
    }

    /**
     * Profil responsable de département
     * @return Le profil si l'enseignant est reponsable de département
     */
    public Profil getProfilDepartement()
    {
        int i = 0;
        Profil sonProfil = null;

        while (i < sesProfils.size() && ((sonProfil = sesProfils.get(i)) != null) && !sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableDepartement"))
        {
            i++;
        }

        if (sonProfil != null && sonProfil.getClass().getSimpleName().equalsIgnoreCase("ResponsableDepartement"))
        {
            return sonProfil;
        }
        else
        {
            return null;
        }
    }
}
